/////precompiled////////
#include "precompiled.h"
////////////////////////


#include "prs_FrmBuildTemplate.h"
using namespace prs;

// TFrmBuildTemplate //////////////////////////////////////////////////////////

//
void TFrmBuildTemplate::Visit(TNodeUseTemplate &Node)
{
  TNodeUseTemplate *NodeUse =&Node;
  TNodeDefTemplate *NodeDef = NodeUse->NodeDefTemplatePtr.GetValue();
  TNodeDefTemplate NodeDefCopy;
    NodeDef->NewAndCopyAttrTo(NodeDefCopy);

	// Body ////////////////////////////////////////
  NodeDefCopy.Body.Value.OldChildren.Array.MoveTo(
    NodeUse->Body.Value.OldChildren.Array
  );

  // Params //////////////////////////////////////////////////
  for (int N = 0; N < NodeDefCopy.Params.Array.Count(); N++) {
    TNodeDefTemplateParam &NodeDefTemplateParam = NodeDefCopy.Params.Array.Get(N);
    
    TNodeUseTemplateParam *NodeUseTemplateParam = NodeUse->SearchParamById(
      NodeDefTemplateParam.Id.GetValue()
    );
    
    if (!NodeUseTemplateParam) {
      NodeUseTemplateParam = new TNodeUseTemplateParam;

      NodeUseTemplateParam->Id = NodeDefTemplateParam.Id;
      NodeUseTemplateParam->DefValue.MoveValueFrom(
        NodeDefTemplateParam.DefValue
      );
        
      NodeUse->Params.Array.Add(NodeUseTemplateParam,true);
    }

///////
//TFrmValue *PP= NodeUseTemplateParam->DefValue;
//if (!PP) {
//PP=PP;
//}
///////

/*******************************************
svl::TMessageModalEx(svl_GetClassName(*this)
  << "\r\nNodeDefTemplateParam\r\n" << NodeDefTemplateParam.GetInfoAsString()
  << "\r\nNodeUseTemplateParam\r\n" << NodeUseTemplateParam->GetInfoAsString()
);
********************/

    NodeDefTemplateParam.LinkAttr.Array.MoveTo(
      NodeUseTemplateParam->LinkAttr.Array
    );

/*******************************************
svl::TMessageModalEx(svl_GetClassName(*this)
  << "\r\nNodeDefTemplateParam\r\n" << NodeDefTemplateParam.GetInfoAsString()
  << "\r\nNodeUseTemplateParam\r\n" << NodeUseTemplateParam->GetInfoAsString()
);
*******************/
  }

/****************************************
svl::TMessageModal(svl_GetClassName(*this)
  //<< "\r\nNodeDef\r\n"     << NodeDef->GetInfoAsString()
  //<< "\r\nNodeDefCopy\r\n" << NodeDefCopy.GetInfoAsString()
  << "\r\nNodeUse\r\n"     << NodeUse->GetInfoAsString()
);
*******************************/

  Node.AcceptChildren(*this);

/**************************
svl::TMessageModal(svl_GetClassName(*this)
  << "\r\nNodeUse\r\n" << NodeUse->GetInfoAsString()
);
************************/

  NodeUse->SetParamsValue();

/**************************
svl::TMessageModal(svl_GetClassName(*this)
  << "\r\nNodeUse\r\n" << NodeUse->GetInfoAsString()
);
************************/

}
